package main

import (
	"encoding/json"

	"jlpay-sdk-go/pkg/jlpay/demo"
	"jlpay-sdk-go/pkg/jlpay/models/openmerch/change"
	change2 "jlpay-sdk-go/pkg/jlpay/services/openmerch/change"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// 结算账户变更示例
func settleAccountChangeDemo(changeService *change2.ChangeService) {
	// 构建辅助证明材料
	proofInfo := []map[string]interface{}{
		{
			"proof_type": "01", // 证明类型：01-营业执照
			"proof_name": "营业执照",
			"proof_url":  "https://example.com/license.jpg",
		},
		{
			"proof_type": "02", // 证明类型：02-身份证
			"proof_name": "法人身份证",
			"proof_url":  "https://example.com/idcard.jpg",
		},
	}

	// 构建请求参数（包含敏感字段，将被自动加密）
	requestData := map[string]interface{}{
		"apply_id":                    "b8659ea518d14c99b78b5ad000a0729c", // 使用新的申请单号
		"merch_no":                    "849584358140109",                  // 使用新的商户号
		"settle_type":                 "01",                               // 结算类型：01-对私
		"account_name":                "张三",                               // 结算账户名（敏感字段）
		"account_no":                  "6222021234567890123",              // 账号（敏感字段）
		"bank_code":                   "ICBC",                             // 工商银行
		"bank_branch_id":              "102100000000",
		"bank_branch_name":            "工商银行北京朝阳支行",
		"account_pic":                 "https://example.com/account.jpg",
		"bank_set_phone":              "13800138000",        // 预留银行手机号码（敏感字段）
		"cert_type":                   "01",                 // 证件类型：01-身份证
		"delegatee_id_card":           "110101199001011234", // 收款人证件号码（敏感字段）
		"delegatee_cert_period_begin": "2020-01-01",
		"delegatee_cert_period_end":   "2030-01-01",
		"acct_license":                "https://example.com/license.jpg",
		"acct_cert_front_pic":         "https://example.com/idcard_front.jpg",
		"acct_cert_back_pic":          "https://example.com/idcard_back.jpg",
		"acct_auth_letter":            "https://example.com/auth_letter.jpg",
		"identity_face_pic":           "https://example.com/face.jpg",
		"acct_face_pic":               "https://example.com/acct_face.jpg",
		"proof_info":                  proofInfo,
	}

	request := change.NewSettleAccountChangeRequest()
	request.SetRawRequestMap(requestData)

	// 序列化请求数据并打印
	requestJSON, _ := json.Marshal(requestData)
	utils.Debugf("结算账户变更请求数据: %s", string(requestJSON))

	// 发送请求（敏感字段将被自动加密）
	response, err := changeService.ChangeSettleAccount(request)
	if err != nil {
		utils.Errorf("结算账户变更请求失败: %v", err)
		return
	}

	// 处理响应 - 使用BaseResponse接口的HandleResponse方法
	response.HandleResponse("结算账户变更")
}

func main() {
	// 设置日志级别为info，显示详细的调试信息
	utils.SetLogLevel("info")

	utils.Info("=============================")
	utils.Info("===== 结算账户变更示例 开始 =====")
	utils.Info("=============================")

	// 创建配置对象和变更服务
	config := demo.CreateDemoConfig()
	changeService := change2.NewChangeService(config)

	settleAccountChangeDemo(changeService)

	utils.Info("=============================")
	utils.Info("===== 结算账户变更示例执行完毕 =====")
	utils.Info("=============================")
}
